src = $(wildcard src/*.c)
obj = $(src:.c=.o) $(msrc:.m=.o)
dep = $(obj:.o=.d)
name = glory
hdr = glory.h
pc = glory.pc

api_major = 0
api_minor = 1

CFLAGS = -pedantic -Wall $(pic) $(dbg) $(opt) -Iinclude -Isrc \
		 $(CFLAGS_xrandr) $(CFLAGS_xf86vm)
LDFLAGS = $(libgl) $(LDFLAGS_xrandr) $(LDFLAGS_xf86vm)

sys = $(shell uname -s)

ifeq ($(sys), Darwin)
	lib_a = lib$(name).a
	lib_so = lib$(name).dylib
	shared = -dynamiclib

	msrc += $(wildcard src/cocoa/*.m)

	libgl = -framework OpenGL -framework Cocoa
else
	lib_a = lib$(name).a
	devlink = lib$(name).so
	soname = lib$(name).so.$(api_major)
	lib_so = lib$(name).so.$(api_major).$(api_minor)
	shared = -shared -Wl,-soname=$(soname)
	pic = -fPIC

	src += $(wildcard src/x11/*.c)

	libgl = -lGL -lX11
endif

.PHONY: all
all: $(lib_a) $(lib_so)

$(lib_so): $(obj)
	$(CC) -o $@ $(shared) $(obj) $(LDFLAGS)

$(lib_a): $(obj)
	$(AR) rcs $@ $(obj)

$(pc): $(pc).in
	echo 'prefix=$(PREFIX)' >$@
	echo 'libgl=$(libgl)' >>$@
	cat $< >>$@

-include $(dep)

%.d: %.c
	@$(CPP) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@

.PHONY: clean
clean:
	rm -f $(obj) $(lib_a) $(lib_so) $(dep)

.PHONY: install
install: $(pc)
	mkdir -p $(DESTDIR)$(PREFIX)/include
	mkdir -p $(DESTDIR)$(PREFIX)/lib/pkgconfig
	cp include/$(hdr) $(DESTDIR)$(PREFIX)/include/$(hdr)
	cp $(lib_a) $(DESTDIR)$(PREFIX)/lib/$(lib_a)
	cp $(lib_so) $(DESTDIR)$(PREFIX)/lib/$(lib_so)
	[ -n "$(soname)" ] \
		&& cd $(DESTDIR)$(PREFIX)/lib \
		&& rm -f $(soname) $(devlink) \
		&& ln -s $(lib_so) $(soname) \
		&& ln -s $(soname) $(devlink) \
		|| true
	cp $(pc) $(DESTDIR)$(PREFIX)/lib/pkgconfig/$(pc)

.PHONY: uninstall
uninstall:
	rm -f $(DESTDIR)$(PREFIX)/include/$(hdr)
	rm -f $(DESTDIR)$(PREFIX)/lib/$(lib_a)
	rm -f $(DESTDIR)$(PREFIX)/lib/$(lib_so)
	[ -n "$(soname)" ] \
		&& rm -f $(DESTDIR)$(PREFIX)/lib/$(soname) \
		&& rm -f $(DESTDIR)$(PREFIX)/lib/$(devlink) \
		|| true
	rm -f $(DESTDIR)$(PREFIX)/lib/pkgconfig/$(pc)
